﻿using Exam.infranstuctrue.Dto.Request.Exam;
using Exam.infranstuctrue.Dto.Request.Exercise;
using Exam.infranstuctrue.Dto.Respones;
using Exam.infranstuctrue.Tools.Attributes;

namespace Exam.Service.Interface
{
    [IProvider]
    public interface IExerciseServer
    {
        /// <summary>
        /// 开始刷题
        /// </summary>
        /// <returns></returns>
        Task<ApiResult> GetQuestionBank(string? uid);
        /// <summary>
        /// 结束刷题
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        Task<ApiResult> EndExercisServer(ExerciseDto dto);
        /// <summary>
        /// 获取用户任务
        /// </summary>
        /// <param name="uid"></param>
        /// <returns></returns>
        Task<ApiResult> GetTask(string? uid);
        /// <summary>
        /// 刷新完成任务
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        Task<ApiResult> RefreshTask(ExerciseDto? dto);
        /// <summary>
        /// 获取试卷
        /// </summary>
        /// <param name="lable"></param>
        /// <param name="number"></param>
        /// <returns></returns>
        Task<ApiResult> GetTestpaper(string? label, int? lv);
        /// <summary>
        /// 开始模拟
        /// </summary>
        /// <param name="uid"></param>
        /// <returns></returns>
        Task<ApiResult> BeginSimulation(string? uid,string? tpid);
        /// <summary>
        /// 生成模拟试题
        /// </summary>
        /// <param name="uid"></param>
        /// <returns></returns>
        Task<ApiResult> GetQuestionSimulation(string? tpid);
        /// <summary>
        /// 结束模拟 
        /// </summary>
        /// <param name="uid"></param>
        /// <returns></returns>
        Task<ApiResult> EndSimulation(SimulationDto dto);
        /// <summary>
        /// 获取以模拟试卷
        /// </summary>
        /// <param name="uid"></param>
        /// <returns></returns>
        Task<ApiResult> GetSimulationTestPaper(string? uid);
        /// <summary>
        /// 模拟详情
        /// </summary>
        /// <param name="uid"></param>
        /// <param name="tpid"></param>
        /// <returns></returns>
        Task<ApiResult> SimulationParticulars(string? uid, string? tpid, string? sid);
        /// <summary>
        /// 刷题数量排名
        /// </summary>
        /// <param name="uid"></param>
        /// <returns></returns>
        Task<ApiResult> ExerciseCountRanking(string? uid,string? token);
        /// <summary>
        /// 刷题正确率排名
        /// </summary>
        /// <param name="uid"></param>
        /// <returns></returns>
        Task<ApiResult> ExerciseAccuracyRanking(string? uid,string token);
        /// <summary>
        /// 刷新旧任务
        /// </summary>
        /// <returns></returns>
        Task<ApiResult> RefreshOldTask();
    }
}
